package vashion.azeroth.core.activity.dao;


import vashion.azeroth.core.activity.GlobalActivityInfoDO;
import vashion.azeroth.core.activity.query.ActivityInfoQueryDO;
import vashion.azeroth.core.dao.BaseDao;
import vashion.azeroth.core.dao.DaoRepository;

import java.util.Date;
import java.util.List;

/**
 */
@DaoRepository
public interface GlobalActivityInfoDAO extends BaseDao<GlobalActivityInfoDO> {

    /**
     * 查找除过期外的所有编辑或生效的活动
     *
     * @param activityType
     * @return
     */
    public List<GlobalActivityInfoDO> queryFutureActivityByType(Integer activityType);

    /**
     * 查找某种类型的当前正生效中的活动
     *
     * @param activityType
     * @return
     */
    public List<GlobalActivityInfoDO> queryCurrentActivityByType(Integer activityType);

    /**
     * 更新活动
     *
     * @param globalActivityInfoDO
     * @return
     */
    public Boolean updateGlobalActivityInfo(GlobalActivityInfoDO globalActivityInfoDO);

    /**
     * 逻辑修改状态
     */
    public void updateStatus(GlobalActivityInfoDO globalActivityInfoDO);

    /**
     * 容灾代码：开始时间倒排的第一个正常活动
     *
     * @param activityType
     * @return
     */
    public GlobalActivityInfoDO querySingleActivityInfoByType(Integer activityType);

    /**
     * 获取needSize个已经开始的状态为正常的频道信息
     * 实现实现：start_time <= nowTime order by start_time limit 0,needSize
     *
     * @param activityType 频道类型@ActiveSchemaEnum
     * @param needSize     频道个数
     * @param nowTime      当前时间
     * @return
     */
    public List<GlobalActivityInfoDO> getLatestActivityBlockInfoList(Integer activityType, int needSize, Date nowTime);

    /**
     * 查找某种类型的活动,计数
     */
    int queryCountAllActivityByType(ActivityInfoQueryDO activityInfoQueryDO);

    /**
     * 查找某种类型的活动。按活动生效时间降序排列
     *
     * @return
     */
    List<GlobalActivityInfoDO> queryAllActivityByType(ActivityInfoQueryDO activityInfoQueryDO);
}
